package com.vecspace.dayu.code.httphandler;

import java.util.List;

import com.vecspace.dayu.code.model.DataTableVO;
import org.springframework.beans.factory.annotation.Autowired;

import com.vecspace.dayu.code.pojo.DataColumn;
import com.vecspace.dayu.code.pojo.DataTable;
import com.vecspace.dayu.code.service.DataTableService;
import com.vecspace.security.model.LoginContext;
import com.vecspace.web.servlet.model.BaseController;
import com.vecspace.web.servlet.model.HController;
import com.vecspace.web.servlet.model.Param;
import com.vecspace.web.servlet.model.Path;

/** DAYU-表视图定义,按顺序号进行left join httphandler
 * 在handler中进行与页面相关的处理，比如把数据转换为HTML格式等。
 * @author wanghua
 * @reviewer
*/
@HController("dayucode_dataTableHandler")
public class DataTableHandler extends BaseController {

	/**根据ID查询 DAYU-表视图定义,按顺序号进行left join
	 * @return DataTable
	 * @throws Exception
	 * @author wanghua
	 */
	@Path("getDataTable")
	public DataTable getDataTable(@Param("id") Long id) throws Exception {
		return dataTableService.getDataTable(id);
	}

	@Path("getDataTableVO")
	public DataTableVO getDataTableVO(@Param("id") Long id) throws Exception {
		DataTableVO vo = new DataTableVO();
		DataTable table = dataTableService.getDataTable(id);
		vo.setTable(table);
		return vo;
	}

	/**获取项目中所有注册的数据表
	 * 
	 * @param projectId
	 * @return
	 * @throws Exception
	 */
	@Path("getProjectDataTables")
	public List<DataTable> getProjectDataTables(@Param("projectId")Long projectId) throws Exception{
		return dataTableService.getProjectDataTables(projectId);
	}

	@Path("getDataTableWithColumns")
	public DataTable getDataTableWithColumns(@Param("id") Long id) throws Exception {
		DataTable dataTable = dataTableService.getDataTableWithColumns(id);
		return dataTable;
	}

	/**从pdm文件中读取表字段
	 * 
	 * @param projectId
	 * @param tableName
	 * @return
	 * @throws Exception 
	 * @author wanghua
	 * @reviewer  
	 * @createTime 2021年9月11日 下午10:41:33
	 */
	@Path("getDataColumnsByTableName")
	public List<DataColumn> getDataColumnsByTableName(@Param("projectId")Long projectId, @Param("tableName")String tableName) throws Exception{
		return dataTableService.getDataColumns(projectId, tableName);
	}
	
	/**从pdm文件中读取表和字段
	 * 
	 * @param projectId
	 * @param tableName
	 * @return
	 * @throws Exception 
	 * @author wanghua
	 * @reviewer  
	 * @createTime 2021年9月11日 下午10:44:27
	 */
	@Path("getTableWithColumnsByTableName")
	public DataTable getTableWithColumnsByTableName(@Param("projectId")Long projectId, @Param("tableName")String tableName) throws Exception {
		return dataTableService.readTableColumnsInfoFromPdm(projectId, tableName);
	}
	/**获取功能涉及的数据表
	 * 
	 * @param funcId
	 * @return
	 * @throws Exception 
	 * @author wanghua
	 */
	@Path("getDataTables")
	public List<DataTable> getDataTables(@Param("funcId")Long funcId) throws Exception {
		return dataTableService.getDataTables(funcId);
	}
	
	/**获取pdm文件中所有的数据表
	 * 
	 * @param projectId
	 * @return
	 * @throws Exception 
	 * @author wanghua
	 * @reviewer  
	 * @createTime 2021年9月11日 上午9:45:16
	 */
	@Path("getPdmDataTableNames")
	public List<DataTable> getPdmDataTableNames(@Param("projectId")Long projectId) throws Exception {
		List<DataTable> tables = dataTableService.getTableNames(projectId);
		return tables;
	}

	/** 插入或修改 DAYU-表视图定义,按顺序号进行left join 
	 * @param item	要保存的对象
	 * @return void
	 * @throws Exception
	 * @author wanghua
	 */
	@Path("saveDataTable")
	public DataTable saveDataTable(@Param("item") DataTable item) throws Exception {
		if (item == null){
			return null;
		}
		/*** 对item对象进行校验，如必填项，格式，逻辑关系等 ***/
		String loginUserId = LoginContext.getLoginId();
		return dataTableService.saveViewDataTable(item, loginUserId);
	}
	
	/**更新单个字段的值
	 * 
	 * @param id
	 * @param propName
	 * @param value
	 * @return
	 * @throws Exception 
	 * @author wanghua
	 */
	@Path("updateProp")
	public DataTable updateProp(@Param("id")Long id, @Param("propName")String propName, @Param("value")String value) throws Exception {
		dataTableService.updateProp(id, propName, value);
		return dataTableService.getDataTable(id);
	}

	/** 根据ID删除 DAYU-表视图定义,按顺序号进行left join 
	 * @param id	主键值
	 * @return void
	 * @throws Exception
	 * @author wanghua
	 */
	@Path("deleteDataTable")
	public void deleteDataTable(@Param("id") Long id) throws Exception {
		dataTableService.deleteDataTable(id);
	}

	/**重新从pdm文件中同步表的字段
	 * 
	 * @param datatableId
	 * @throws Exception 
	 * @author wanghua
	 */
	@Path("syncColumns")
	public void syncColumns(@Param("datatableId")Long datatableId) throws Exception {
		String loginId = LoginContext.getLoginId();
		dataTableService.syncColumns(datatableId, loginId);
	}
	
	/************* property ********************/
	@Autowired
	private DataTableService dataTableService;

}
